// Package cli 配置合并工具
package cli

import (
	"github.com/dean2027/aish/pkg/config"
	"github.com/urfave/cli/v2"
)

// MergeConfigFromCLI 从CLI上下文合并配置
// 按优先级顺序应用：CLI参数 > 环境变量 > 配置文件 > 默认值
func MergeConfigFromCLI(cfg *config.Config, c *cli.Context) {
	// 应用字符串类型参数
	applyStringFlags(cfg, c)

	// 应用整数类型参数
	applyIntFlags(cfg, c)

	// 应用布尔类型参数
	applyBoolFlags(cfg, c)
}

// applyStringFlags 应用字符串类型的CLI参数
func applyStringFlags(cfg *config.Config, c *cli.Context) {
	stringFlags := []struct {
		flagName string
		setValue func(string)
	}{
		{"api-key", func(v string) { cfg.APIKey = v }},
		{"base-url", func(v string) { cfg.BaseURL = v }},
		{"model", func(v string) { cfg.Model = v }},
	}

	for _, flag := range stringFlags {
		if value := c.String(flag.flagName); value != "" {
			flag.setValue(value)
		}
	}
}

// applyIntFlags 应用整数类型的CLI参数
func applyIntFlags(cfg *config.Config, c *cli.Context) {
	intFlags := []struct {
		flagName string
		setValue func(int)
	}{
		{"max-iterations", func(v int) { cfg.MaxIterations = v }},
		{"max-history", func(v int) { cfg.MaxHistory = v }},
		{"command-timeout", func(v int) { cfg.CommandTimeout = v }},
		{"reasoning-timeout", func(v int) { cfg.ReasoningTimeout = v }},
	}

	for _, flag := range intFlags {
		if value := c.Int(flag.flagName); value > 0 {
			flag.setValue(value)
		}
	}
}

// applyBoolFlags 应用布尔类型的CLI参数
func applyBoolFlags(cfg *config.Config, c *cli.Context) {
	if c.Bool("skip-confirm") {
		cfg.SkipConfirm = true
	}
}
